# 01.匿名函数

# def add(x,y):
#     return x+y

# f = lambda x,y:x+y
# res = f(1,2)
# print(res)

# my_list = ["a1","a0","b3","c2"]
# # 如果列表中的字符串按照 第二位置上的数字进行升序排列
# # 结果是  ["a0","a1","c2","b3"]
# # 列表下节课进行讲解 这只做演示
# my_list.sort(key=lambda x:x[1])
# print(my_list)



#     定义方式 lambda x:x>10   lambda 变量：表达式(需要使用的时候直接写，不要定义在前面)
#     c=list(filter(lambda x: True if x>100 else False,my_list))
#     fun = lambda x:x*10 等价于 def fun(x):return x*10 
    
#     不要写太复杂  ，代码可读性









# 02.闭包


# def my_print(times):
#     def p(my_str):
#         for i in range(times):
#             print(my_str)
#     return p

# # 函数构造器的设计
# twice = my_print(2)
# twice("hello world!!!")
# triple = my_print(3)
# triple("hello blendder!!!")

#     函数内的函数如何在函数外部进行调用
#     def fun():
#         print("我是外层函数")
#         def funin():
#             def funcinin():
#                 print("我是内层函数")
#             return funcinin()
#         return funin()    

#     fun()  
    
#     ##############################
#     #return 返回函数的时候不要加括号#
#     ##############################
    
#     函数构造器：
#     def fun(times):
#         def fun_in(num):
#             return times*num
#         return fun_in
#     c = fun(5)             ## c--d两种标准值不相同的函数
#     print(c(100))
#     d = fun(6)
#     print(d(7))
#     自行调用：
#     def fun2():
#         print("我是外层函数")
#         def funin2():
#             def funcinin2():
#                 print("我是内层函数")
#             return funcinin2
#         return funin2
#     fun2()()()










# 03.递归和回调函数


# 递归求和
# def cumulate(n):
#     if n==0:
#         return 0
#     if n==1:
#         return 1
#     return n + cumulate(n-1)
# res = cumulate(100)
# print(res)

# 5! = 5 *4 *3 *2 *1
# def mult(n):
#     if n==1:
#         return 1
#     return n * mult(n-1)

# res = mult(4)
# print(res)

# #     回调：函数作为参数进行传递
# def fun1(x,y):   # 函数1
#     return x+y
# def fun2(x,y):  # 函数2
#     return x*y
# def use(func,x,y):  # 传入函数
#     return func(x,y)

# print(use(fun2,5,6))  # 决定调用哪个函数
# print(use(fun1,5,6))


#     函数自身调用自身
#     def fun():
#         fun()
#     或者
#     def fun(a):   # 递归函数计算阶乘
#         if a == 1    # 递归调用出口
#             return num
#         return fun(num-1)*num
#     ## 要点！！ 递归调用一定要指定递归出口
    
#     回调：
#         函数作为参数进行传递
#         def fun(x,y):   # 函数1
#             return x+y
#         def fun2(x,y):  # 函数2
#             return x*y
#         def use(func,x,y):  # 传入函数
#             return func(x,y)
#         print(use(fun2,5,6))  # 决定调用哪个函数
#         print(use(fun,5,6))

